package test;

import strategypattren.DiscountContext;
import strategypattren.OverDiscountStrategy;
import strategypattren.PrimeDiscountStrategy;

import java.math.BigDecimal;

/**
 * 一个完整的策略模式要定义策略以及使用策略的上下文
 * 我们以购物车结算为例，假设网站针对普通会员、Prime会员有不同的折扣，同时活动期间还有一个满100减20的活动，
 * 这些就可以作为策略实现
 */
public class StrategyMain {

    public static void main(String[] args) {
        DiscountContext ctx = new DiscountContext();
        // 默认使用普通会员折扣:
        BigDecimal pay1 = ctx.calculatePrice(BigDecimal.valueOf(105));
        System.out.println("最终付款 = " + pay1);
        // 使用满减折扣:
        ctx.setStrategy(new OverDiscountStrategy());
        BigDecimal pay2 = ctx.calculatePrice(BigDecimal.valueOf(105));
        System.out.println("最终付款 = " + pay2);
        // 使用Prime会员折扣:
        ctx.setStrategy(new PrimeDiscountStrategy());
        BigDecimal pay3 = ctx.calculatePrice(BigDecimal.valueOf(105));
        System.out.println("最终付款 = " + pay3);
    }
}
